﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Input;

namespace Arena_Gangrena
{
    class c_Player
    {
        GraphicsDeviceManager graphics;
        Texture2D spritePlayer;
        float timer = 0f;
        float intervalo = 35f;
        int frame_Atual = 0, largura_Sprite = 48, altura_Sprite = 48, velocidade_Sprite = 3;
        Rectangle base_Sprite;
        Vector2 posicao_Sprite, origem_Sprite;
        KeyboardState TECATUAL, TECANTERIOR;
        bool textura_espelhada = false;
        bool pulando = false;
        int impulso = 56,gravidade = 8;

        public Vector2 player_Posicao 
        {
            get { return posicao_Sprite; }
            set { posicao_Sprite = value; }
        }
        public Vector2 player_Origem
        {
            get { return origem_Sprite; }
            set { origem_Sprite = value; }
        }
        public Texture2D player_Textura
        {
            get { return spritePlayer; }
            set { spritePlayer = value; }
        }
        public Rectangle sprite_Base
        {
            get { return base_Sprite; }
            set { base_Sprite = value; }
        }
        public bool textura_Espelhada
        {
            get { return textura_espelhada; }
            set { textura_espelhada = value; }
        }


        public void SpriteAnimado(Texture2D textura, int frameAtual, int larguraSprite, int alturaSprite)
        {
            this.spritePlayer = textura;
            this.frame_Atual = frameAtual;
            this.largura_Sprite = larguraSprite;
            this.altura_Sprite = alturaSprite;
        }

        public void Update()
        {
            posicao_Sprite.Y += gravidade;
            
        }

        public void MovimentoSprite(GraphicsDeviceManager graphicsmanager, GameTime gameTime)
        {
            graphics = graphicsmanager;
            TECANTERIOR = TECATUAL;
            TECATUAL = Keyboard.GetState();
            base_Sprite = new Rectangle(frame_Atual * largura_Sprite, 0, largura_Sprite, altura_Sprite);

            if (posicao_Sprite.Y > graphics.GraphicsDevice.Viewport.Height - player_Textura.Height) { posicao_Sprite.Y = graphics.GraphicsDevice.Viewport.Height - player_Textura.Height; }
            
            if ((TECATUAL.GetPressedKeys().Length == 0) && (pulando == false))
            {
                if (frame_Atual > 0 && frame_Atual < 16)
                {
                    frame_Atual = 0;
                }
                
            }


            if (TECATUAL.IsKeyDown(Keys.Up) && !TECANTERIOR.IsKeyDown(Keys.Up))
            {
                    frame_Atual = 1;
                    pulando = true;
                    impulso = 112;
                   
            }

            AnimacaoPulo(gameTime);
            
            if (TECATUAL.IsKeyDown(Keys.Right) == true)
            {
                AnimacaoDireita(gameTime);
                if (posicao_Sprite.X < 780) { posicao_Sprite.X += velocidade_Sprite; }
                textura_espelhada = false;
            }

            if (TECATUAL.IsKeyDown(Keys.Left) == true)
            {
                AnimacaoEsquerda(gameTime);
                textura_espelhada = true;
                if (posicao_Sprite.X > 10) { posicao_Sprite.X -= velocidade_Sprite; }
            }
            origem_Sprite = new Vector2(base_Sprite.Width / 16, base_Sprite.Height / 16);
        }

        public void AnimacaoDireita(GameTime gameTime)
        {
            if (TECATUAL != TECANTERIOR) { frame_Atual = 13; }
            timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            if (timer > intervalo)
            {
                frame_Atual++;
                if (frame_Atual > 11) { frame_Atual = 3; }
                timer = 0f;
            }
        }
        public void AnimacaoEsquerda(GameTime gameTime)
        {
            if (TECATUAL != TECANTERIOR) { frame_Atual = 13; }
            timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            if (timer > intervalo)
            {
                frame_Atual++;
                if (frame_Atual > 11) { frame_Atual = 3; }
                timer = 0f;
            }
        }

        public void AnimacaoPulo(GameTime gameTime)
        {
            //if (TECATUAL != TECANTERIOR) { frame_Atual = 13; }
            if (pulando)
            {
                //animacao
                timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                
                if (timer > intervalo)
                {
                    frame_Atual++;
                   
                    if (frame_Atual > 12)
                    {
                        pulando = false;
                        frame_Atual = 3;
                        //impulso = 56;
                    }
                    timer = 0f;
                }
                //fim animacao

                //movimento
                
                if (impulso <= 112)
                {
                    posicao_Sprite.Y -= impulso;
                    
                    impulso -= gravidade;

                    if (impulso < 0)
                    {
                        impulso = 0;
                        //pulando = false;
                    }

                    //if (impulso >= 0)
                    //{
                    //    impulso = impulso - gravidade;
                    //}
                    //else { impulso = 0; }
                }

                //fim movimento
            }
        }
    }
}
